home *** CD-ROM | disk | FTP | other *** search
/ Computer Inter@ctive 16 / Computer Interactive cdrom 16 - dic 98.iso / zdnetit / content / CLASSBLD.ZIP / Include / CB_CriticalSingle.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-20  |  3.0 KB  |  92 lines

  1. #ifndef CB_CRITICAL_SINGLE_H
  2. #define CB_CRITICAL_SINGLE_H
  3.  
  4. #include <assert.h>
  5.  
  6. #include "CB_CriticalSection.h"
  7. #include "CB_Single.h"
  8.  
  9. // defines for include files
  10. #define RELATION_CRITICAL_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  11. public:\
  12.     ClassTo* _ref##NameTo;\
  13. \
  14. public:\
  15.     static CriticalSection _criticalSection##NameTo;\
  16. \
  17.     void Add##NameTo(ClassTo* item);\
  18.     void Remove##NameTo(ClassTo* item);\
  19.     void Move##NameTo(ClassTo* item);\
  20.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  21.     ClassTo* Get##NameTo() { return _ref##NameTo; };
  22.  
  23.  
  24. #define RELATION_CRITICAL_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  25. public:\
  26.     ClassFrom* _ref##NameFrom;\
  27. \
  28. public:\
  29.     ClassFrom* Get##NameFrom() { return _ref##NameFrom; };
  30.  
  31. // defines implementation
  32.  
  33. #define INIT_CRITICAL_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  34.     INIT_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  35.  
  36. #define EXIT_CRITICAL_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  37. {\
  38.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  39.     EXIT_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  40. }
  41.  
  42. #define REPLACE_CRITICAL_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  43. {\
  44.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  45.     REPLACE_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  46. }
  47.  
  48. #define INIT_CRITICAL_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  49.     INIT_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) 
  50.  
  51. #define EXIT_CRITICAL_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  52. {\
  53.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  54.     EXIT_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  55. }
  56.  
  57. #define REPLACE_CRITICAL_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  58. {\
  59.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  60.     REPLACE_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  61. }
  62.  
  63. #define METHODS_CRITICAL_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  64.     CriticalSection ClassFrom##::_criticalSection##NameTo;\
  65. void ClassFrom##::Add##NameTo(ClassTo* item)\
  66. {\
  67.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  68.     METHOD_SINGLE_ADD(ClassFrom, NameFrom, ClassTo, NameTo) \
  69. }\
  70. \
  71. void ClassFrom##::Remove##NameTo(ClassTo* item)\
  72. {\
  73.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  74.     METHOD_SINGLE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  75. }\
  76. \
  77. void ClassFrom##::Move##NameTo(ClassTo* item)\
  78. {\
  79.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  80.     METHOD_SINGLE_MOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  81. }\
  82. \
  83. void ClassFrom##::Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  84. {\
  85.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  86.     METHOD_SINGLE_REPLACE(ClassFrom, NameFrom, ClassTo, NameTo) \
  87. }
  88.  
  89.  
  90. #define METHODS_CRITICAL_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  91.  
  92. #endif